package com.exonline.controller.login;

import com.exonline.commons.dao.DaoImpl;
import com.exonline.commons.dao.IDao;
import com.exonline.entity.Student;
import com.exonline.entity.Teacher;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

/**
 * @desc  登录的M层
 */
public class LoginService  {

    IDao<Object> loginDao = new DaoImpl<>();

    /**
     * 注册方法
     *
     * @param id       用户唯一标识（这里通过工具生成的UUID）
     * @param phone    用户手机号
     * @param password 用户密码
     * @param sname    用户名
     * @return 受影响的行数，如果插入成功返回1，否则返回0
     */
    public int register(String id, String sname, String phone, String password) {
        try {

            // 先检查手机号是否已存在于学生表中
            boolean studentExists = checkPhoneExistsInStudentTable(phone);

            if (studentExists) {
                Student newStudent = new Student();
                newStudent.setId(id);
                newStudent.setSname(sname);
                newStudent.setPhone(phone);
                newStudent.setPassWord(password);
                // 使用loginDao的插入方法将新学生数据插入数据库
                int rowsAffected = loginDao.updateWithTransaction("insert into student (id ,sname ,phone, password) values (?,?,?,?)", id, sname, phone, password);
                return rowsAffected;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return 0;
    }

    /**
     * 检查手机号是否已存在于学生表中
     *
     * @param phone 用户手机号
     * @return true 如果手机号已存在于学生表中，否则返回 false
     */
    private boolean checkPhoneExistsInStudentTable(String phone) throws SQLException {
        Student student = loginDao.queryForObject("select * from student where phone = ?", new BeanHandler<>(Student.class), phone);
        return student == null;
    }


    /**
     * 登录方法
     *
     * @param phone    用户手机号
     * @param password 用户密码
     * @param role     用户角色（"教师" 或 "学生"）
     * @return 如果登录成功，根据角色返回对应的教师或学生对象，否则返回 null
     */
    public Object login(String phone, String password, String role) throws SQLException {
        if ("教师".equals(role)) {
            Teacher teacher = loginDao.queryForObject("select id,tname,workyears,direction,introduce,email,phone,status from teacher where phone=? and password=?  ",new BeanHandler<>(Teacher.class),phone,password);
            if (teacher!= null && "1".equals(teacher.getStatus())) {
                return teacher;
            } else {
                return null;
            }
        } else if ("学生".equals(role)) {
            Student student = loginDao.queryForObject("select id,sname,phone,status from student where phone=? and password=?",new BeanHandler<>(Student.class),phone,password);
            if (student!= null && "1".equals(student.getStatus())) {
                return student;
            }
        }
        return null;
    }
}
